import java.util.Random;

/**
 * 
 * @author Hanzehogeschool Groningen, Instituut voor ICT.
 *
 */


public class SnelheidOefening {

	private static final int MAX_VALUE = 200000;
	
	public static void main( String[] args){
		
		Random random = new Random();
		int searchvalue = random.nextInt(MAX_VALUE);
		System.out.println("searchvalue: "+searchvalue);
		System.out.println("Nieuwe getalrij!");
		
		long timeBefore = SnelheidOefening.tijd();
		GetalRij gr = new GetalRij( 100000, 200000);
		long timeAfter = SnelheidOefening.tijd();
		
		System.out.println("Tijd voor nieuwe getalrij : " + timeBefore );
		System.out.println("Tijd na nieuwe getalrij : " + timeAfter );
		System.out.println("Tijd geduurd : " + (timeAfter - timeBefore) + " nanoseconds" );
		
		System.out.println();
		
		timeBefore = SnelheidOefening.tijd();
		boolean found = gr.zitErinA(searchvalue);
		timeAfter = SnelheidOefening.tijd();
		
		System.out.println("========== Linear search algorithm ======================");
		System.out.println("Tijd voor A : " + timeBefore );
		System.out.println("Tijd na A : " + timeAfter );
		System.out.println("Tijd geduurd : " + (timeAfter - timeBefore) + " nanoseconds" );
		System.out.println("gevonden?: "+found);
		System.out.println("----------------------------------------------------------");
		System.out.println();
		
		timeBefore = SnelheidOefening.tijd();
		found = gr.zitErinB(searchvalue);
		timeAfter = SnelheidOefening.tijd();
		
		System.out.println("========== Linear search algorithm(with break) ======================");
		System.out.println("Tijd voor B : " + SnelheidOefening.tijd() );
		System.out.println("Tijd na B : " + SnelheidOefening.tijd() );
		System.out.println("Tijd geduurd : " + (timeAfter - timeBefore) + " nanoseconds" );
		System.out.println("gevonden?: "+found);
		System.out.println("----------------------------------------------------------");
		System.out.println();
		
		timeBefore = SnelheidOefening.tijd();
		gr.sorteer();
		timeAfter = SnelheidOefening.tijd();
		
		System.out.println("========== Array Sort algorithm ======================");
		System.out.println("Tijd voor sorteren : " + SnelheidOefening.tijd() );	
		System.out.println("Tijd na sorteren : " + SnelheidOefening.tijd() );
		System.out.println("Tijd geduurd : " + (timeAfter - timeBefore) + " nanoseconds" );
		System.out.println("----------------------------------------------------------");
		System.out.println();
		
		timeBefore = SnelheidOefening.tijd();
		found = gr.zitErinC(searchvalue,20);
		timeAfter = SnelheidOefening.tijd();
		
		System.out.println("========== Sector search algorithm("+20+" sectors) ======================");
		System.out.println("Tijd voor C : " + timeBefore );
		System.out.println("Tijd na C : " + timeAfter );
		System.out.println("Tijd geduurd : " + (timeAfter - timeBefore) + " nanoseconds" );
		System.out.println("gevonden?: "+found);
		System.out.println("----------------------------------------------------------");

		
		timeBefore = SnelheidOefening.tijd();
		found = gr.zitErinD(searchvalue);
		timeAfter = SnelheidOefening.tijd();
		
		System.out.println("========== Binary search algorithm ======================");
		System.out.println("Tijd voor D : " + SnelheidOefening.tijd() );
		System.out.println("Tijd na D : " + SnelheidOefening.tijd() );
		System.out.println("Tijd geduurd : " + (timeAfter - timeBefore) + " nanoseconds" );
		System.out.println("gevonden?: "+found);
		System.out.println("----------------------------------------------------------");
		System.out.println();
		
	
		
	}

	// Hulpmethode voor tijdsbepaling
	private static long tijd(){
		return System.nanoTime();
	}

}